//
//  CJOAuthViewController.swift
//  SinaWeibo
//
//  Created by 程建 on 16/9/25.
//  Copyright © 2016年 itcast. All rights reserved.
//

import UIKit
import SVProgressHUD



class CJOAuthViewController: UIViewController {
    
    //懒加载webView
    lazy var webView = UIWebView()
    
    override func loadView() {
        
        //加载UIWebView时会出现一片黑色的区域
        //isOpaque 透明的
        webView.isOpaque = false
        
        view = webView
        
        webView.delegate = self
        
        view.backgroundColor = UIColor.white
        
        setNavBar()
        
        //加载授权页面
        loadOAuthView()

    }
    
    //ui 界面的创建
    private func setNavBar() {
        
        navigationItem.leftBarButtonItem = UIBarButtonItem(title: "返回", target: self, action: #selector(back))
        
        
        //上线的时候要记得将这个方法 注销掉
        navigationItem.rightBarButtonItem = UIBarButtonItem(title: "快速登入", target: self, action: #selector(fillAccount))
    }
    
    //按钮的监听事件
    @objc private func back() {
    
        dismiss(animated: true, completion: nil)
    }
    
    
    //快速登入的按钮的监听事件
    //设置默认账号 执行js字符串
    @objc private func fillAccount() {
    
        //webView执行js
        let jsString = "document.getElementById('userId').value = '15861832153', document.getElementById('passwd').value = 'cp520131466' "
        
        webView.stringByEvaluatingJavaScript(from: jsString)
        
    }
    
    //4201969081  b48f0d38fbbda9179ffc6ab25365bd87 https://api.weibo.com/oauth2/authorize
    func loadOAuthView() {
        
        let urlString = "https://api.weibo.com/oauth2/authorize?" + "client_id=" + client_id + "&redirect_uri=" + redirect_uri
        
        let url = URL(string: urlString)
        
        let request = URLRequest(url: url!)
        
        //加载页面
        webView.loadRequest(request)
        
    }
    
    
}

//swift 建议协议方法写在拓展方法里  extension
//这个拓展是专门实现代理方法的
extension CJOAuthViewController: UIWebViewDelegate {

    //实现代理方法
    //加载webView页面等待指示器
    
    func webViewDidStartLoad(_ webView: UIWebView) {
        //开启加载界面
        //开启等待指示器
        SVProgressHUD.show()
    }
    
    func webViewDidFinishLoad(_ webView: UIWebView) {
        //加载完成
        //关闭等待指示器
        SVProgressHUD.dismiss()
    }

    //网页每次加载新的页面实际上都是重写发送了request 在该方法中就可以拦截该请求
    //该协议方法的返回值是bool类型 如果返回true 该空间可以正常使用否则就不能够正常
    func webView(_ webView: UIWebView, shouldStartLoadWith request: URLRequest, navigationType: UIWebViewNavigationType) -> Bool {
        
        //获取重定向url的code
        //绝对路径url对象的string 形式
        let urlString = request.url?.absoluteString ?? ""
        
        //如果urlString中包含 包含code= 则认为授权成功,截取code
        let float = "code="
        
        if urlString.contains(float){
            
            //只完成截取code 操作
            //"https://m.baidu.com/?code=3bc92521ab9c981e623d19d5c381c206&from=844b&vit=fps"
            
            //获取url参数部分
            let query = request.url?.query ?? ""
           
            //截取code后面的数
            let code = (query as NSString).substring(from: float.characters.count)
            
            //利用code 请求token
            //成功了之后需要加载baidu.com
            //控制器关注请求的状态  成功还是失败
           // loadAccessToken(code: code)
            CJUserAccountViewModel.shardAccountViewModel.loadAccessToken(code: code, finished: { (success) in
                if !success {
                    
                    SVProgressHUD.show(withStatus: errorTip)
                    return
                }
                
                //如果成功
                print("登录获取用信息成功")
                //切换到欢迎页面
                //不建议使用modal的方式切换视图控制器,而是使用切换根视图控制器
                //    UIApplication.shared.keyWindow?.rootViewController = CJWelcomeViewController()
                //    UIApplication.shared.delegate?.window??.rootViewController = CJWelcomeViewController()
                //发布通知
                NotificationCenter.default.post(name: NSNotification.Name(KchangeRootViewController), object: "Welcome")
                
                
                
            })
            
            return false
            
        }
        
        return true
    }
    
    
    
}
 



